package com.cy.basic;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
    @interface Entity{
        String value() default "";
}
@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD,ElementType.FIELD})
@interface ID{
    String operation() default "";
}
    @Entity("t_user")
    class User{
    @ID(operation = "uid")
        private Integer id;
    }



@Entity
public class AnnotationTests {
    public static void main(String[] args) throws NoSuchFieldException, ClassNotFoundException {
        //获取user类上的entity注解中的内容
        //1.1获取user类字节码对象的两种方法;
//        1.class.forName(包名.类名)
        Class<?> target = Class.forName("com.cy.basic.User");
        //2.直接类名.class输出
        Class<?> targetCls = User.class;
        //1.2获取User类上的Entity注解
        /**
         * 对象赋值给变量,等号左边的是对象,等号右边就必须要求是变量进行接收;
         * Entity是注解,所有的注解又是继承Annotation,因此可看作接口类型
         * 等号对象的类型是代理对象
         */

        Entity entity = targetCls.getAnnotation(Entity.class);
        //1.3获取Entity注解value属性值
        String envalue = entity.value();

        String entityValue =User.class.getAnnotation(Entity.class).value();
        System.out.println(entityValue);

        //2获取注解id的属性值
        //获取User类中的id属性
       Field  f = targetCls.getDeclaredField("id");
       //2.2获取id属性上ID注解
        ID id =f.getAnnotation(ID.class);
        //2.3获取id 属性上的operation值
        String IdOperation = id.operation();
        System.out.println(IdOperation);
    }



}
